package com.qfjy.service.impl;

import com.qfjy.entity.po.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

/**
 * @ClassName DemoServiceImpl
 * @Description TODO
 * @Author guoweixin
 * @Date 2022/3/22
 * @Version 1.0
 */
@Service
@Slf4j
public class DemoServiceImpl {



    @Autowired
    private JedisPool jedisPool;

    public void test1(){
        log.info("Jedis连接池："+jedisPool);
        Jedis jedis=jedisPool.getResource();
        log.info("Jedis连接："+jedis);

        // Redis有哪些命令，Jedis就有哪些方法
        jedis.set("java:name","李炎");
        jedis.close();

    }


    /**
     * Redis有哪些命令，Jedis就有哪些方法
     *
     * Redis string类型
     * 案例：
     * 缓存：先来判断缓存中是否存在数据，如果缓存中不存在数据，查询MYSQL数据库，再将MYSQL数据查询的结果存入缓存中。
     */

    public String getString(String key){
        //获得Jedis连接
        Jedis jedis=jedisPool.getResource();

        //1 生成ip地址key
        String ipKey="protect:192.168.20.123";
         long num= jedis.incr(ipKey);
         jedis.expire(ipKey,2);

        if(jedis.exists(key)){
            log.info("查询的是Redis----》");
            String result=jedis.get(key);

            jedis.close();
            return result;
        }else{
            log.info("查询的是MYSQL数据库数据----》");
            String result="JAVA2106班级";
            jedis.set(key,result);
            jedis.close();
            return result;
        }

    }

    /**
     * Redis操作hash类型 (Redis有什么命令，Jedis有什么方法）
     * Hash:特别适合存储一个对象
      案例：根据用户ID查询用户信息对象，
            判断Redis中是否存在，如果存在，直接返回对象
            Redis中如果不存在，查询MYSQL，将查询结果存入Redis中。

     */
    public User selectUserById(String id){
        //redis命令规范:
          //User.getKeyName();
        String key="user:"+id;

        Jedis jedis=jedisPool.getResource();
        User user=new User();
        if(!jedis.exists(key)){
            log.info("查询MYSQL数据库---》"+id);
            user.setId(id);
            user.setName("余长乐");
            user.setRemark("在认真的学习redis");

            Map<String,String> map=new HashMap<>();
            map.put("id",user.getId());
            map.put("name",user.getName());
            map.put("remark",user.getRemark());
            jedis.hmset(key,map);

        }else{
            log.info("查询的是Redis----》");
           Map<String,String> map= jedis.hgetAll(key);
            user.setId(map.get("id"));
            user.setName(map.get("name"));
            user.setRemark(map.get("remark"));
        }

        jedis.close();
        return user;
    }


    /**
     * 限制用户恶意访问请求
     */
    public boolean proctet(){


        return  false;
    }



}
